<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>libspotify: Playlist subsystem</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />



</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">libspotify
   
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.8.0 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&#160;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<div class="title">Playlist subsystem</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsp__playlist__callbacks.html">sp_playlist_callbacks</a></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structsp__playlistcontainer__callbacks.html">sp_playlistcontainer_callbacks</a></td></tr>
<tr><td colspan="2"><h2><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga8249fe3d53c6dce0f154d0bfd3e80c6a"><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/>
<a class="el" href="structsp__playlist__callbacks.html">sp_playlist_callbacks</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga8249fe3d53c6dce0f154d0bfd3e80c6a">sp_playlist_callbacks</a></td></tr>
<tr class="memitem:ga8786e3840bb3774fc929183e3a9df281"><td class="memItemLeft" align="right" valign="top">typedef struct <br class="typebreak"/>
<a class="el" href="structsp__playlistcontainer__callbacks.html">sp_playlistcontainer_callbacks</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga8786e3840bb3774fc929183e3a9df281">sp_playlistcontainer_callbacks</a></td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaee8ea6c07dfdca3397e27b278fa4870a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gaee8ea6c07dfdca3397e27b278fa4870a">sp_playlist_is_loaded</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:gab15fca12d387c69b4998a4d2b48e5b32"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gab15fca12d387c69b4998a4d2b48e5b32">sp_playlist_add_callbacks</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, <a class="el" href="structsp__playlist__callbacks.html">sp_playlist_callbacks</a> *callbacks, void *userdata)</td></tr>
<tr class="memitem:ga7fcbf909a0fa8bf25f0b1d1e7dd0e160"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga7fcbf909a0fa8bf25f0b1d1e7dd0e160">sp_playlist_remove_callbacks</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, <a class="el" href="structsp__playlist__callbacks.html">sp_playlist_callbacks</a> *callbacks, void *userdata)</td></tr>
<tr class="memitem:ga684a3acc60f99b3b26488ed813ee5d23"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga684a3acc60f99b3b26488ed813ee5d23">sp_playlist_num_tracks</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:ga7a03854fe6072476306780d23c6cac16"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga47bbd2262f0c8b5d7147af7d62198e48">sp_track</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga7a03854fe6072476306780d23c6cac16">sp_playlist_track</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, int index)</td></tr>
<tr class="memitem:gab8e77f8d63e787f8aa1a066d74daa74c"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gab8e77f8d63e787f8aa1a066d74daa74c">sp_playlist_track_create_time</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, int index)</td></tr>
<tr class="memitem:ga80fcd9e7b40c791433c07d66e2ad432a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#gaed2dbaa1eebd6752f76613daad9158bc">sp_user</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga80fcd9e7b40c791433c07d66e2ad432a">sp_playlist_track_creator</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, int index)</td></tr>
<tr class="memitem:gab9e00ee5bc6b5dc0b3d58cbdb32c0c7b"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gab9e00ee5bc6b5dc0b3d58cbdb32c0c7b">sp_playlist_track_seen</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, int index)</td></tr>
<tr class="memitem:ga69f5cc1bdd7dbdcdb476a7b1d2b7834d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga69f5cc1bdd7dbdcdb476a7b1d2b7834d">sp_playlist_track_set_seen</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, int index, bool seen)</td></tr>
<tr class="memitem:ga6887b9dabb30a060b10bdb75f8b3f971"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga6887b9dabb30a060b10bdb75f8b3f971">sp_playlist_track_message</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, int index)</td></tr>
<tr class="memitem:ga61b7e33cc1aedb4e31a2af75ae0ac8cc"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga61b7e33cc1aedb4e31a2af75ae0ac8cc">sp_playlist_name</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:gad6c3880c514353e204fdd90830b516ec"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gad6c3880c514353e204fdd90830b516ec">sp_playlist_rename</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, const char *new_name)</td></tr>
<tr class="memitem:gac3e4295d3353eb9998402aedfdbd55de"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#gaed2dbaa1eebd6752f76613daad9158bc">sp_user</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gac3e4295d3353eb9998402aedfdbd55de">sp_playlist_owner</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:ga8ad160f654f02f13690568070dd57353"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga8ad160f654f02f13690568070dd57353">sp_playlist_is_collaborative</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:gad15410bcc2ebd986adabda865830bce4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gad15410bcc2ebd986adabda865830bce4">sp_playlist_set_collaborative</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, bool collaborative)</td></tr>
<tr class="memitem:ga0bde47f340e0cd590a78007c6af69307"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga0bde47f340e0cd590a78007c6af69307">sp_playlist_set_autolink_tracks</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, bool link)</td></tr>
<tr class="memitem:gab1d8e0ee9b436ecbb104bbd6cc0665be"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gab1d8e0ee9b436ecbb104bbd6cc0665be">sp_playlist_get_description</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:ga409cb6b2a88db7242ec939b6644e8c30"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga409cb6b2a88db7242ec939b6644e8c30">sp_playlist_get_image</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, byte image[20])</td></tr>
<tr class="memitem:gaf0e39b5969259d10625eb398af0f3f43"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gaf0e39b5969259d10625eb398af0f3f43">sp_playlist_has_pending_changes</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:ga2344a47133f7f0aed0a67e154ecc4dc4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga2344a47133f7f0aed0a67e154ecc4dc4">sp_playlist_add_tracks</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, <a class="el" href="group__types.html#ga47bbd2262f0c8b5d7147af7d62198e48">sp_track</a> *const *tracks, int num_tracks, int position, <a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session)</td></tr>
<tr class="memitem:gabd62cd7ff9484b4c31ff7f159ec41b6a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gabd62cd7ff9484b4c31ff7f159ec41b6a">sp_playlist_remove_tracks</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, const int *tracks, int num_tracks)</td></tr>
<tr class="memitem:ga90ffd8c9fc6abc7375e89f4cb49adb11"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga90ffd8c9fc6abc7375e89f4cb49adb11">sp_playlist_reorder_tracks</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, const int *tracks, int num_tracks, int new_position)</td></tr>
<tr class="memitem:ga967ad87f0db702513ecda82546f667c5"><td class="memItemLeft" align="right" valign="top">unsigned int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga967ad87f0db702513ecda82546f667c5">sp_playlist_num_subscribers</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:gad49f491babc475f8d4aeea1b4452ff8b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structsp__subscribers.html">sp_subscribers</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gad49f491babc475f8d4aeea1b4452ff8b">sp_playlist_subscribers</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:gae7754b74b1c3c8f5222ca43b6608ce6a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gae7754b74b1c3c8f5222ca43b6608ce6a">sp_playlist_subscribers_free</a> (<a class="el" href="structsp__subscribers.html">sp_subscribers</a> *subscribers)</td></tr>
<tr class="memitem:ga9ebbf147230b3ca98b68e556cf24e6bd"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga9ebbf147230b3ca98b68e556cf24e6bd">sp_playlist_update_subscribers</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:ga28456d1242693c6d890516dc782ab3ec"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga28456d1242693c6d890516dc782ab3ec">sp_playlist_is_in_ram</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:gaf6ca8a349bdd982f6c8dda52ed691017"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gaf6ca8a349bdd982f6c8dda52ed691017">sp_playlist_set_in_ram</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, bool in_ram)</td></tr>
<tr class="memitem:ga342a6a0cfe10531ef7cb3c6629c1e8e7"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga342a6a0cfe10531ef7cb3c6629c1e8e7">sp_playlist_create</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__types.html#gaf90a23d6b662c96d52ac19f7f4bc1e39">sp_link</a> *link)</td></tr>
<tr class="memitem:ga784f648f9cc431ef3b51f3491c2f169f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga784f648f9cc431ef3b51f3491c2f169f">sp_playlist_set_offline_mode</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, bool offline)</td></tr>
<tr class="memitem:ga7170157af21445c37a21a2241f91ff06"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__session.html#ga811fa52ed0fdb5cda732682e27e40417">sp_playlist_offline_status</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga7170157af21445c37a21a2241f91ff06">sp_playlist_get_offline_status</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:ga83ca1a25f50834f8e6f8ee1e883a8c6e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga83ca1a25f50834f8e6f8ee1e883a8c6e">sp_playlist_get_offline_download_completed</a> (<a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *session, <a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:gacb10979add5a954e5c1600ef9c5b17a8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gacb10979add5a954e5c1600ef9c5b17a8">sp_playlist_add_ref</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:gacb9250eb530869b039541a8b62dfab6c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gacb9250eb530869b039541a8b62dfab6c">sp_playlist_release</a> (<a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
<tr class="memitem:ga1976cb49c391cdd2dbe7c40d1bc71570"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga1976cb49c391cdd2dbe7c40d1bc71570">sp_playlistcontainer_add_callbacks</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, <a class="el" href="structsp__playlistcontainer__callbacks.html">sp_playlistcontainer_callbacks</a> *callbacks, void *userdata)</td></tr>
<tr class="memitem:gafb5242b8f0f9964cec29d32f4d6c1164"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gafb5242b8f0f9964cec29d32f4d6c1164">sp_playlistcontainer_remove_callbacks</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, <a class="el" href="structsp__playlistcontainer__callbacks.html">sp_playlistcontainer_callbacks</a> *callbacks, void *userdata)</td></tr>
<tr class="memitem:ga7a1cbf558b2b364b8249d4ce432df700"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga7a1cbf558b2b364b8249d4ce432df700">sp_playlistcontainer_num_playlists</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc)</td></tr>
<tr class="memitem:gae23cb67b4b26bca663034997c4418fa8"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gae23cb67b4b26bca663034997c4418fa8">sp_playlistcontainer_is_loaded</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc)</td></tr>
<tr class="memitem:ga5ddd8c8064c281a14c6fd7877f522dc6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga5ddd8c8064c281a14c6fd7877f522dc6">sp_playlistcontainer_playlist</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, int index)</td></tr>
<tr class="memitem:ga79286860a3eeada495e97c5ad1fd7ebf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__session.html#gafdd7117213605e6f2671c4f289b44609">sp_playlist_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga79286860a3eeada495e97c5ad1fd7ebf">sp_playlistcontainer_playlist_type</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, int index)</td></tr>
<tr class="memitem:ga852e5f5bcd4520be2e3d6d5d94def44a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga852e5f5bcd4520be2e3d6d5d94def44a">sp_playlistcontainer_playlist_folder_name</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, int index, char *buffer, int buffer_size)</td></tr>
<tr class="memitem:ga6939f9db71199612fc5a19d395e3a7f8"><td class="memItemLeft" align="right" valign="top">sp_uint64&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga6939f9db71199612fc5a19d395e3a7f8">sp_playlistcontainer_playlist_folder_id</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, int index)</td></tr>
<tr class="memitem:ga840b82b1074a7ca1c9eacd351bed24c2"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga840b82b1074a7ca1c9eacd351bed24c2">sp_playlistcontainer_add_new_playlist</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, const char *name)</td></tr>
<tr class="memitem:ga87699479087915b741ceef4eebe69ad8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga87699479087915b741ceef4eebe69ad8">sp_playlistcontainer_add_playlist</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, <a class="el" href="group__types.html#gaf90a23d6b662c96d52ac19f7f4bc1e39">sp_link</a> *link)</td></tr>
<tr class="memitem:ga1ae1d51c4305940ae5c5c98c12be0afc"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga1ae1d51c4305940ae5c5c98c12be0afc">sp_playlistcontainer_remove_playlist</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, int index)</td></tr>
<tr class="memitem:gad9be708159957d4c1e5ef905550808c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gad9be708159957d4c1e5ef905550808c5">sp_playlistcontainer_move_playlist</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, int index, int new_position, bool dry_run)</td></tr>
<tr class="memitem:ga0862502eea52fc5f2465ebad6fd98796"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga0862502eea52fc5f2465ebad6fd98796">sp_playlistcontainer_add_folder</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, int index, const char *name)</td></tr>
<tr class="memitem:gad4fc67d1386dd637f778f4e735a36894"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__types.html#gaed2dbaa1eebd6752f76613daad9158bc">sp_user</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gad4fc67d1386dd637f778f4e735a36894">sp_playlistcontainer_owner</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc)</td></tr>
<tr class="memitem:ga2138c537a6ebcd35a01eea54d0dd1e8f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga2138c537a6ebcd35a01eea54d0dd1e8f">sp_playlistcontainer_add_ref</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc)</td></tr>
<tr class="memitem:ga0311c7c3c4f26028e5edd4aacb36dbf8"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#ga0311c7c3c4f26028e5edd4aacb36dbf8">sp_playlistcontainer_release</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc)</td></tr>
<tr class="memitem:gad9e11b45843ee4a147b43038a2e55f13"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gad9e11b45843ee4a147b43038a2e55f13">sp_playlistcontainer_get_unseen_tracks</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, <a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist, <a class="el" href="group__types.html#ga47bbd2262f0c8b5d7147af7d62198e48">sp_track</a> **tracks, int num_tracks)</td></tr>
<tr class="memitem:gadaad604c35e543363e1dd5b23c462db0"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__playlist.html#gadaad604c35e543363e1dd5b23c462db0">sp_playlistcontainer_clear_unseen_tracks</a> (<a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *pc, <a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *playlist)</td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<p>The playlist subsystem handles playlists and playlist containers (list of playlists).</p>
<p>The playlist container functions are always valid, but your playlists are not guaranteed to be loaded until the <a class="el" href="structsp__session__callbacks.html#a52d509962541f7d8fdd71284f40d8415">sp_session_callbacks::logged_in</a> callback has been issued. </p>
<hr/><h2>Typedef Documentation</h2>
<a class="anchor" id="ga8249fe3d53c6dce0f154d0bfd3e80c6a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structsp__playlist__callbacks.html">sp_playlist_callbacks</a>  <a class="el" href="structsp__playlist__callbacks.html">sp_playlist_callbacks</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Playlist callbacks</p>
<p>Used to get notifications when playlists are updated. If some callbacks should not be of interest, set them to NULL. </p>

</div>
</div>
<a class="anchor" id="ga8786e3840bb3774fc929183e3a9df281"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">typedef struct <a class="el" href="structsp__playlistcontainer__callbacks.html">sp_playlistcontainer_callbacks</a>  <a class="el" href="structsp__playlistcontainer__callbacks.html">sp_playlistcontainer_callbacks</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Playlist container callbacks. If some callbacks should not be of interest, set them to NULL.</p>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__playlist.html#ga1976cb49c391cdd2dbe7c40d1bc71570">sp_playlistcontainer_add_callbacks</a> </dd>
<dd>
<a class="el" href="group__playlist.html#gafb5242b8f0f9964cec29d32f4d6c1164">sp_playlistcontainer_remove_callbacks</a> </dd></dl>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="gab15fca12d387c69b4998a4d2b48e5b32"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#gab15fca12d387c69b4998a4d2b48e5b32">sp_playlist_add_callbacks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structsp__playlist__callbacks.html">sp_playlist_callbacks</a> *&#160;</td>
          <td class="paramname"><em>callbacks</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>userdata</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Register interest in the given playlist</p>
<p>Here is a snippet from <code>jukebox.c:</code>  <div class="fragment"><pre class="fragment">    <a class="code" href="group__playlist.html#gab15fca12d387c69b4998a4d2b48e5b32">sp_playlist_add_callbacks</a>(pl, &amp;pl_callbacks, NULL);
</pre></div></p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">callbacks</td><td>Callbacks, see <a class="el" href="structsp__playlist__callbacks.html">sp_playlist_callbacks</a> </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">userdata</td><td>Userdata to be passed to callbacks </td></tr>
  </table>
  </dd>
</dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__playlist.html#ga7fcbf909a0fa8bf25f0b1d1e7dd0e160">sp_playlist_remove_callbacks</a> </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="browse_8c-example.html#a44">browse.c</a>, and <a class="el" href="jukebox_8c-example.html#a11">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gacb10979add5a954e5c1600ef9c5b17a8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#gacb10979add5a954e5c1600ef9c5b17a8">sp_playlist_add_ref</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Increase the reference count of a playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>The playlist object </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga2344a47133f7f0aed0a67e154ecc4dc4"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga2344a47133f7f0aed0a67e154ecc4dc4">sp_playlist_add_tracks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga47bbd2262f0c8b5d7147af7d62198e48">sp_track</a> *const *&#160;</td>
          <td class="paramname"><em>tracks</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>num_tracks</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>position</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Add tracks to a playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tracks</td><td>Array of pointer to tracks. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">num_tracks</td><td>Length of <code>tracks</code> array </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">position</td><td>Start position in playlist where to insert the tracks </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Your session object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_INVALID_INDATA - position is &gt; current playlist length SP_ERROR_PERMISSION_DENIED </dd></dl>

</div>
</div>
<a class="anchor" id="ga342a6a0cfe10531ef7cb3c6629c1e8e7"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a>* <a class="el" href="group__playlist.html#ga342a6a0cfe10531ef7cb3c6629c1e8e7">sp_playlist_create</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#gaf90a23d6b662c96d52ac19f7f4bc1e39">sp_link</a> *&#160;</td>
          <td class="paramname"><em>link</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Load an already existing playlist without adding it to a playlistcontainer.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">link</td><td>Link object referring to a playlist</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A playlist. The reference is owned by the caller and should be released with <a class="el" href="group__playlist.html#gacb9250eb530869b039541a8b62dfab6c">sp_playlist_release()</a> </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="browse_8c-example.html#a59">browse.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gab1d8e0ee9b436ecbb104bbd6cc0665be"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* <a class="el" href="group__playlist.html#gab1d8e0ee9b436ecbb104bbd6cc0665be">sp_playlist_get_description</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get description for a playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Playlist description or NULL if unset </dd></dl>

</div>
</div>
<a class="anchor" id="ga409cb6b2a88db7242ec939b6644e8c30"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="group__playlist.html#ga409cb6b2a88db7242ec939b6644e8c30">sp_playlist_get_image</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">byte&#160;</td>
          <td class="paramname"><em>image</em>[20]&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get description for a playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">image</td><td>20 byte image id</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>TRUE if playlist has an image, FALSE if not </dd></dl>

</div>
</div>
<a class="anchor" id="ga83ca1a25f50834f8e6f8ee1e883a8c6e"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__playlist.html#ga83ca1a25f50834f8e6f8ee1e883a8c6e">sp_playlist_get_offline_download_completed</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get download progress for an offline playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Value from 0 - 100 that indicates amount of playlist that is downloaded or 0 if the playlist is not in the SP_PLAYLIST_OFFLINE_STATUS_DOWNLOADING mode.</dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga811fa52ed0fdb5cda732682e27e40417">sp_playlist_offline_status()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ga7170157af21445c37a21a2241f91ff06"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__session.html#ga811fa52ed0fdb5cda732682e27e40417">sp_playlist_offline_status</a> <a class="el" href="group__playlist.html#ga7170157af21445c37a21a2241f91ff06">sp_playlist_get_offline_status</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get offline status for a playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>sp_playlist_offline_status</dd></dl>
<dl class="section see"><dt>See also:</dt><dd>When in <a class="el" href="group__session.html#gga811fa52ed0fdb5cda732682e27e40417abc999c70761d392b26753708e9a2cfa1" title="This playlist is currently downloading. Only one playlist can be in this state any given time...">SP_PLAYLIST_OFFLINE_STATUS_DOWNLOADING</a> mode the <a class="el" href="group__playlist.html#ga83ca1a25f50834f8e6f8ee1e883a8c6e">sp_playlist_get_offline_download_completed()</a> method can be used to query progress of the download </dd></dl>

</div>
</div>
<a class="anchor" id="gaf0e39b5969259d10625eb398af0f3f43"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="group__playlist.html#gaf0e39b5969259d10625eb398af0f3f43">sp_playlist_has_pending_changes</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Check if a playlist has pending changes</p>
<p>Pending changes are local changes that have not yet been acknowledged by the server.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>A flag representing if there are pending changes or not </dd></dl>

</div>
</div>
<a class="anchor" id="ga8ad160f654f02f13690568070dd57353"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="group__playlist.html#ga8ad160f654f02f13690568070dd57353">sp_playlist_is_collaborative</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return collaborative status for a playlist.</p>
<p>A playlist in collaborative state can be modifed by all users, not only the user owning the list</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>true if playlist is collaborative, otherwise false </dd></dl>

</div>
</div>
<a class="anchor" id="ga28456d1242693c6d890516dc782ab3ec"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="group__playlist.html#ga28456d1242693c6d890516dc782ab3ec">sp_playlist_is_in_ram</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return whether a playlist is loaded in RAM (as opposed to only stored on disk)</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>True iff playlist is in RAM, False otherwise</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>When a playlist is no longer in RAM it will appear empty. However, libspotify will retain information about the list metadata (owner, title, picture, etc) in RAM. There is one caveat tough: If libspotify has never seen the playlist before this metadata will also be unset. In order for libspotify to get the metadata the playlist needs to be loaded at least once. In order words, if libspotify starts with an empty playlist cache and the application has set 'initially_unload_playlists' config parameter to True all playlists will be empty. It will not be possible to generate URI's to the playlists nor extract playlist title until the application calls sp_playlist_set_in_ram(..., true). So an application that needs to stay within a low memory profile would need to cycle thru all new playlists in order to extract metadata.</dd></dl>
<p>The easiest way to detect this case is when <a class="el" href="group__playlist.html#ga28456d1242693c6d890516dc782ab3ec">sp_playlist_is_in_ram()</a> returns false and <a class="el" href="group__link.html#ga805392bfa8e526eebedc1cf5a7bcae0f">sp_link_create_from_playlist()</a> returns NULL </p>

</div>
</div>
<a class="anchor" id="gaee8ea6c07dfdca3397e27b278fa4870a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="group__playlist.html#gaee8ea6c07dfdca3397e27b278fa4870a">sp_playlist_is_loaded</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get load status for the specified playlist. If it's false, you have to wait until playlist_state_changed happens, and check again if is_loaded has changed</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>True if playlist is loaded, otherwise false </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="browse_8c-example.html#a37">browse.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga61b7e33cc1aedb4e31a2af75ae0ac8cc"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* <a class="el" href="group__playlist.html#ga61b7e33cc1aedb4e31a2af75ae0ac8cc">sp_playlist_name</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return name of given playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The name of the given playlist </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="browse_8c-example.html#a43">browse.c</a>, and <a class="el" href="jukebox_8c-example.html#a8">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga967ad87f0db702513ecda82546f667c5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">unsigned int <a class="el" href="group__playlist.html#ga967ad87f0db702513ecda82546f667c5">sp_playlist_num_subscribers</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return number of subscribers for a given playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Number of subscribers </dd></dl>

</div>
</div>
<a class="anchor" id="ga684a3acc60f99b3b26488ed813ee5d23"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__playlist.html#ga684a3acc60f99b3b26488ed813ee5d23">sp_playlist_num_tracks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return number of tracks in the given playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The number of tracks in the playlist </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="browse_8c-example.html#a38">browse.c</a>, and <a class="el" href="jukebox_8c-example.html#a0">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gac3e4295d3353eb9998402aedfdbd55de"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#gaed2dbaa1eebd6752f76613daad9158bc">sp_user</a>* <a class="el" href="group__playlist.html#gac3e4295d3353eb9998402aedfdbd55de">sp_playlist_owner</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return a pointer to the user for the given playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>User object </dd></dl>

</div>
</div>
<a class="anchor" id="gacb9250eb530869b039541a8b62dfab6c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#gacb9250eb530869b039541a8b62dfab6c">sp_playlist_release</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Decrease the reference count of a playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>The playlist object </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="browse_8c-example.html#a42">browse.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga7fcbf909a0fa8bf25f0b1d1e7dd0e160"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga7fcbf909a0fa8bf25f0b1d1e7dd0e160">sp_playlist_remove_callbacks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structsp__playlist__callbacks.html">sp_playlist_callbacks</a> *&#160;</td>
          <td class="paramname"><em>callbacks</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>userdata</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Unregister interest in the given playlist</p>
<p>The combination of (<code>callbacks</code>, <code>userdata</code>) is used to find the entry to be removed</p>
<p>Here is a snippet from <code>jukebox.c:</code>  <div class="fragment"><pre class="fragment">    <a class="code" href="group__playlist.html#ga7fcbf909a0fa8bf25f0b1d1e7dd0e160">sp_playlist_remove_callbacks</a>(pl, &amp;pl_callbacks, NULL);
</pre></div></p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">callbacks</td><td>Callbacks, see <a class="el" href="structsp__playlist__callbacks.html">sp_playlist_callbacks</a> </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">userdata</td><td>Userdata to be passed to callbacks </td></tr>
  </table>
  </dd>
</dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__playlist.html#gab15fca12d387c69b4998a4d2b48e5b32">sp_playlist_add_callbacks</a> </dd></dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="browse_8c-example.html#a41">browse.c</a>, and <a class="el" href="jukebox_8c-example.html#a12">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gabd62cd7ff9484b4c31ff7f159ec41b6a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#gabd62cd7ff9484b4c31ff7f159ec41b6a">sp_playlist_remove_tracks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int *&#160;</td>
          <td class="paramname"><em>tracks</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>num_tracks</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Remove tracks from a playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tracks</td><td>Array of pointer to track indices. A certain track index should be present at most once, e.g. [0, 1, 2] is valid indata, whereas [0, 1, 1] is invalid. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">num_tracks</td><td>Length of <code>tracks</code> array</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_PERMISSION_DENIED </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a28">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gad6c3880c514353e204fdd90830b516ec"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#gad6c3880c514353e204fdd90830b516ec">sp_playlist_rename</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>new_name</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Rename the given playlist The name must not consist of only spaces and it must be shorter than 256 characters.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">new_name</td><td>New name for playlist</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_INVALID_INDATA SP_ERROR_PERMISSION_DENIED </dd></dl>

</div>
</div>
<a class="anchor" id="ga90ffd8c9fc6abc7375e89f4cb49adb11"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga90ffd8c9fc6abc7375e89f4cb49adb11">sp_playlist_reorder_tracks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const int *&#160;</td>
          <td class="paramname"><em>tracks</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>num_tracks</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>new_position</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Move tracks in playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">tracks</td><td>Array of pointer to track indices to be moved. A certain track index should be present at most once, e.g. [0, 1, 2] is valid indata, whereas [0, 1, 1] is invalid. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">num_tracks</td><td>Length of <code>tracks</code> array </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">new_position</td><td>New position for tracks</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_INVALID_INDATA - position is &gt; current playlist length SP_ERROR_PERMISSION_DENIED </dd></dl>

</div>
</div>
<a class="anchor" id="ga0bde47f340e0cd590a78007c6af69307"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga0bde47f340e0cd590a78007c6af69307">sp_playlist_set_autolink_tracks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>link</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set autolinking state for a playlist.</p>
<p>If a playlist is autolinked, unplayable tracks will be made playable by linking them to other Spotify tracks, where possible.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">link</td><td>True or false </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="gad15410bcc2ebd986adabda865830bce4"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#gad15410bcc2ebd986adabda865830bce4">sp_playlist_set_collaborative</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>collaborative</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set collaborative status for a playlist.</p>
<p>A playlist in collaborative state can be modified by all users, not only the user owning the list</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">collaborative</td><td>True or false </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="gaf6ca8a349bdd982f6c8dda52ed691017"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#gaf6ca8a349bdd982f6c8dda52ed691017">sp_playlist_set_in_ram</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>in_ram</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return whether a playlist is loaded in RAM (as opposed to only stored on disk)</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">in_ram</td><td>Controls whether or not to keep the list in RAM </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga784f648f9cc431ef3b51f3491c2f169f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga784f648f9cc431ef3b51f3491c2f169f">sp_playlist_set_offline_mode</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>offline</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Mark a playlist to be synchronized for offline playback. The playlist must be in the users playlistcontainer</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">offline</td><td>True iff playlist should be offline, false otherwise </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="gad49f491babc475f8d4aeea1b4452ff8b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="structsp__subscribers.html">sp_subscribers</a>* <a class="el" href="group__playlist.html#gad49f491babc475f8d4aeea1b4452ff8b">sp_playlist_subscribers</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return subscribers for a playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd><a class="el" href="structsp__subscribers.html">sp_subscribers</a> struct with array of canonical usernames. This object should be free'd using <a class="el" href="group__playlist.html#gae7754b74b1c3c8f5222ca43b6608ce6a">sp_playlist_subscribers_free()</a></dd></dl>
<dl class="section note"><dt>Note:</dt><dd>The count returned for this function may be less than those returned by <a class="el" href="group__playlist.html#ga967ad87f0db702513ecda82546f667c5">sp_playlist_num_subscribers()</a>. Spotify does not track each user subscribed to a playlist for playlist with many (&gt;500) subscribers. </dd></dl>

</div>
</div>
<a class="anchor" id="gae7754b74b1c3c8f5222ca43b6608ce6a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#gae7754b74b1c3c8f5222ca43b6608ce6a">sp_playlist_subscribers_free</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structsp__subscribers.html">sp_subscribers</a> *&#160;</td>
          <td class="paramname"><em>subscribers</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Free object returned from <a class="el" href="group__playlist.html#gad49f491babc475f8d4aeea1b4452ff8b">sp_playlist_subscribers()</a></p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">subscribers</td><td>Subscribers object </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga7a03854fe6072476306780d23c6cac16"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#ga47bbd2262f0c8b5d7147af7d62198e48">sp_track</a>* <a class="el" href="group__playlist.html#ga7a03854fe6072476306780d23c6cac16">sp_playlist_track</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return the track at the given index in a playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index into playlist container. Should be in the interval [0, <a class="el" href="group__playlist.html#ga684a3acc60f99b3b26488ed813ee5d23">sp_playlist_num_tracks()</a> - 1]</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The track at the given index </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="browse_8c-example.html#a39">browse.c</a>, and <a class="el" href="jukebox_8c-example.html#a1">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gab8e77f8d63e787f8aa1a066d74daa74c"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__playlist.html#gab8e77f8d63e787f8aa1a066d74daa74c">sp_playlist_track_create_time</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return when the given index was added to the playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index into playlist container. Should be in the interval [0, <a class="el" href="group__playlist.html#ga684a3acc60f99b3b26488ed813ee5d23">sp_playlist_num_tracks()</a> - 1]</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Time, Seconds since unix epoch. </dd></dl>

</div>
</div>
<a class="anchor" id="ga80fcd9e7b40c791433c07d66e2ad432a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#gaed2dbaa1eebd6752f76613daad9158bc">sp_user</a>* <a class="el" href="group__playlist.html#ga80fcd9e7b40c791433c07d66e2ad432a">sp_playlist_track_creator</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return user that added the given index in the playlist</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index into playlist container. Should be in the interval [0, <a class="el" href="group__playlist.html#ga684a3acc60f99b3b26488ed813ee5d23">sp_playlist_num_tracks()</a> - 1]</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>User object </dd></dl>

</div>
</div>
<a class="anchor" id="ga6887b9dabb30a060b10bdb75f8b3f971"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* <a class="el" href="group__playlist.html#ga6887b9dabb30a060b10bdb75f8b3f971">sp_playlist_track_message</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return a message attached to a playlist item. Typically used on inbox.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index into playlist container. Should be in the interval [0, <a class="el" href="group__playlist.html#ga684a3acc60f99b3b26488ed813ee5d23">sp_playlist_num_tracks()</a> - 1]</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>UTF-8 encoded message, or NULL if no message is present </dd></dl>

</div>
</div>
<a class="anchor" id="gab9e00ee5bc6b5dc0b3d58cbdb32c0c7b"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="group__playlist.html#gab9e00ee5bc6b5dc0b3d58cbdb32c0c7b">sp_playlist_track_seen</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return if a playlist entry is marked as seen or not</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index into playlist container. Should be in the interval [0, <a class="el" href="group__playlist.html#ga684a3acc60f99b3b26488ed813ee5d23">sp_playlist_num_tracks()</a> - 1]</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Seen state </dd></dl>

</div>
</div>
<a class="anchor" id="ga69f5cc1bdd7dbdcdb476a7b1d2b7834d"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga69f5cc1bdd7dbdcdb476a7b1d2b7834d">sp_playlist_track_set_seen</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>seen</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Set seen status of a playlist entry</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index into playlist container. Should be in the interval [0, <a class="el" href="group__playlist.html#ga684a3acc60f99b3b26488ed813ee5d23">sp_playlist_num_tracks()</a> - 1] </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">seen</td><td>Seen status to be set</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>error One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_INDEX_OUT_OF_RANGE </dd></dl>

</div>
</div>
<a class="anchor" id="ga9ebbf147230b3ca98b68e556cf24e6bd"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga9ebbf147230b3ca98b68e556cf24e6bd">sp_playlist_update_subscribers</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga70dd19c6f824cf6a159575aa4c128b53">sp_session</a> *&#160;</td>
          <td class="paramname"><em>session</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Ask library to update the subscription count for a playlist</p>
<p>When the subscription info has been fetched from the Spotify backend the playlist subscribers_changed() callback will be invoked. In that callback use <a class="el" href="group__playlist.html#ga967ad87f0db702513ecda82546f667c5">sp_playlist_num_subscribers()</a> and/or <a class="el" href="group__playlist.html#gad49f491babc475f8d4aeea1b4452ff8b">sp_playlist_subscribers()</a> to get information about the subscribers. You can call those two functions anytime you want but the information might not be up to date in such cases</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">session</td><td>Session object </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga1976cb49c391cdd2dbe7c40d1bc71570"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga1976cb49c391cdd2dbe7c40d1bc71570">sp_playlistcontainer_add_callbacks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structsp__playlistcontainer__callbacks.html">sp_playlistcontainer_callbacks</a> *&#160;</td>
          <td class="paramname"><em>callbacks</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>userdata</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Register interest in changes to a playlist container</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">callbacks</td><td>Callbacks, see <a class="el" href="structsp__playlistcontainer__callbacks.html">sp_playlistcontainer_callbacks</a> </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">userdata</td><td>Opaque value passed to callbacks.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section note"><dt>Note:</dt><dd>Every <a class="el" href="group__playlist.html#ga1976cb49c391cdd2dbe7c40d1bc71570">sp_playlistcontainer_add_callbacks()</a> needs to be paired with a corresponding <a class="el" href="group__playlist.html#gafb5242b8f0f9964cec29d32f4d6c1164">sp_playlistcontainer_remove_callbacks()</a> that is invoked before releasing the last reference you own for the container. In other words, you must make sure to have removed all the callbacks before the container gets destroyed.</dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga319767f0b795f1c46a08390b587c5671">sp_session_playlistcontainer()</a> </dd>
<dd>
<a class="el" href="group__playlist.html#gafb5242b8f0f9964cec29d32f4d6c1164">sp_playlistcontainer_remove_callbacks</a> </dd></dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a18">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga0862502eea52fc5f2465ebad6fd98796"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga0862502eea52fc5f2465ebad6fd98796">sp_playlistcontainer_add_folder</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Add a playlist folder</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Position of SP_PLAYLIST_TYPE_START_FOLDER entry </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">name</td><td>Name of group</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>error One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_INDEX_OUT_OF_RANGE</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>This operation will actually create two playlists. One of type SP_PLAYLIST_TYPE_START_FOLDER and immediately following a SP_PLAYLIST_TYPE_END_FOLDER one.</dd></dl>
<p>To remove a playlist folder both of these must be deleted or the list will be left in an inconsistant state.</p>
<p>There is no way to rename a playlist folder. Instead you need to remove the folder and recreate it again. </p>

</div>
</div>
<a class="anchor" id="ga840b82b1074a7ca1c9eacd351bed24c2"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a>* <a class="el" href="group__playlist.html#ga840b82b1074a7ca1c9eacd351bed24c2">sp_playlistcontainer_add_new_playlist</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&#160;</td>
          <td class="paramname"><em>name</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Add an empty playlist at the end of the playlist container. The name must not consist of only spaces and it must be shorter than 256 characters.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">name</td><td>Name of new playlist</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Pointer to the new playlist. Can be NULL if the operation fails. </dd></dl>

</div>
</div>
<a class="anchor" id="ga87699479087915b741ceef4eebe69ad8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a>* <a class="el" href="group__playlist.html#ga87699479087915b741ceef4eebe69ad8">sp_playlistcontainer_add_playlist</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#gaf90a23d6b662c96d52ac19f7f4bc1e39">sp_link</a> *&#160;</td>
          <td class="paramname"><em>link</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Add an existing playlist at the end of the given playlist container</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">link</td><td>Link object pointing to a playlist</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Pointer to the new playlist. Will be NULL if the playlist already exists. </dd></dl>

</div>
</div>
<a class="anchor" id="ga2138c537a6ebcd35a01eea54d0dd1e8f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga2138c537a6ebcd35a01eea54d0dd1e8f">sp_playlistcontainer_add_ref</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Increase reference count on playlistconatiner object</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="gadaad604c35e543363e1dd5b23c462db0"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__playlist.html#gadaad604c35e543363e1dd5b23c462db0">sp_playlistcontainer_clear_unseen_tracks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Clears a playlist from unseen tracks, so that next call to <a class="el" href="group__playlist.html#gad9e11b45843ee4a147b43038a2e55f13">sp_playlistcontainer_get_unseen_tracks()</a> will return 0 until a new track is added to the <code>playslist</code>.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Returns 0 on success and -1 on failure. </dd></dl>

</div>
</div>
<a class="anchor" id="gad9e11b45843ee4a147b43038a2e55f13"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__playlist.html#gad9e11b45843ee4a147b43038a2e55f13">sp_playlistcontainer_get_unseen_tracks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a> *&#160;</td>
          <td class="paramname"><em>playlist</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="group__types.html#ga47bbd2262f0c8b5d7147af7d62198e48">sp_track</a> **&#160;</td>
          <td class="paramname"><em>tracks</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>num_tracks</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Get the number of new tracks in a playlist since the corresponding function <a class="el" href="group__playlist.html#gadaad604c35e543363e1dd5b23c462db0">sp_playlistcontainer_clear_unseen_tracks()</a> was called. The function always returns the number of new tracks, and fills the <code>tracks</code> array with the new tracks, but not more than specified in <code>num_tracks</code>. The function will return a negative value on failure.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">playlist</td><td>Playlist object. </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">tracks</td><td>Array of pointer to new tracks (maybe NULL) </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">num_tracks</td><td>Size of tracks array </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Returns the number of unseen tracks </dd></dl>

</div>
</div>
<a class="anchor" id="gae23cb67b4b26bca663034997c4418fa8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="group__playlist.html#gae23cb67b4b26bca663034997c4418fa8">sp_playlistcontainer_is_loaded</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return true if the playlistcontainer is fully loaded</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>True if container is loaded</dd></dl>
<dl class="section note"><dt>Note:</dt><dd>The container_loaded callback will be invoked when this flips to true </dd></dl>

</div>
</div>
<a class="anchor" id="gad9be708159957d4c1e5ef905550808c5"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#gad9be708159957d4c1e5ef905550808c5">sp_playlistcontainer_move_playlist</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>new_position</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&#160;</td>
          <td class="paramname"><em>dry_run</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Move a playlist in the playlist container</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index of playlist to be moved </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">new_position</td><td>New position for the playlist </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">dry_run</td><td>Do not execute the move, only check if it possible</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>error One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_INDEX_OUT_OF_RANGE SP_ERROR_INVALID_INDATA - If trying to move a folder into itself </dd></dl>

</div>
</div>
<a class="anchor" id="ga7a1cbf558b2b364b8249d4ce432df700"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="group__playlist.html#ga7a1cbf558b2b364b8249d4ce432df700">sp_playlistcontainer_num_playlists</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return the number of playlists in the given playlist container</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Number of playlists, -1 if undefined</dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga319767f0b795f1c46a08390b587c5671">sp_session_playlistcontainer()</a> </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a13">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="gad4fc67d1386dd637f778f4e735a36894"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#gaed2dbaa1eebd6752f76613daad9158bc">sp_user</a>* <a class="el" href="group__playlist.html#gad4fc67d1386dd637f778f4e735a36894">sp_playlistcontainer_owner</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return a pointer to the user object of the owner.</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The user object or NULL if unknown or none. </dd></dl>

</div>
</div>
<a class="anchor" id="ga5ddd8c8064c281a14c6fd7877f522dc6"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__types.html#ga1bcf54cbc117a20ab2c15e59eb3a8174">sp_playlist</a>* <a class="el" href="group__playlist.html#ga5ddd8c8064c281a14c6fd7877f522dc6">sp_playlistcontainer_playlist</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return a pointer to the playlist at a specific index</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index in playlist container. Should be in the interval [0, <a class="el" href="group__playlist.html#ga7a1cbf558b2b364b8249d4ce432df700">sp_playlistcontainer_num_playlists()</a> - 1]</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The playlist object</dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga319767f0b795f1c46a08390b587c5671">sp_session_playlistcontainer()</a> </dd></dl>
<dl><dt><b>Examples: </b></dt><dd><a class="el" href="jukebox_8c-example.html#a19">jukebox.c</a>.</dd>
</dl>
</div>
</div>
<a class="anchor" id="ga6939f9db71199612fc5a19d395e3a7f8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">sp_uint64 <a class="el" href="group__playlist.html#ga6939f9db71199612fc5a19d395e3a7f8">sp_playlistcontainer_playlist_folder_id</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return the folder id at <em>index</em> </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index in playlist container. Should be in the interval [0, <a class="el" href="group__playlist.html#ga7a1cbf558b2b364b8249d4ce432df700">sp_playlistcontainer_num_playlists()</a> - 1]</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>The group ID of the folder. Returns 0 on index out of range, pc being NULL or indexed item not being a folder</dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga319767f0b795f1c46a08390b587c5671">sp_session_playlistcontainer()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ga852e5f5bcd4520be2e3d6d5d94def44a"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga852e5f5bcd4520be2e3d6d5d94def44a">sp_playlistcontainer_playlist_folder_name</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">char *&#160;</td>
          <td class="paramname"><em>buffer</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>buffer_size</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return the folder name at <em>index</em> </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index in playlist container. Should be in the interval [0, <a class="el" href="group__playlist.html#ga7a1cbf558b2b364b8249d4ce432df700">sp_playlistcontainer_num_playlists()</a> - 1]. Index should point at a start-folder entry, otherwise the empty string is written to buffer. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">buffer</td><td>Pointer to char[] where to store folder name </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">buffer_size</td><td>Size of array</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_INDEX_OUT_OF_RANGE</dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga319767f0b795f1c46a08390b587c5671">sp_session_playlistcontainer()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ga79286860a3eeada495e97c5ad1fd7ebf"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__session.html#gafdd7117213605e6f2671c4f289b44609">sp_playlist_type</a> <a class="el" href="group__playlist.html#ga79286860a3eeada495e97c5ad1fd7ebf">sp_playlistcontainer_playlist_type</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Return the type of the playlist at a <em>index</em> </p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index in playlist container. Should be in the interval [0, <a class="el" href="group__playlist.html#ga7a1cbf558b2b364b8249d4ce432df700">sp_playlistcontainer_num_playlists()</a> - 1]</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>Type of the playlist, </dd></dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga86723f553db2db6a8f507cd748948ad4">sp_playlist_type</a></dd>
<dd>
<a class="el" href="group__session.html#ga319767f0b795f1c46a08390b587c5671">sp_session_playlistcontainer()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="ga0311c7c3c4f26028e5edd4aacb36dbf8"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga0311c7c3c4f26028e5edd4aacb36dbf8">sp_playlistcontainer_release</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Release reference count on playlistconatiner object</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="gafb5242b8f0f9964cec29d32f4d6c1164"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#gafb5242b8f0f9964cec29d32f4d6c1164">sp_playlistcontainer_remove_callbacks</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="structsp__playlistcontainer__callbacks.html">sp_playlistcontainer_callbacks</a> *&#160;</td>
          <td class="paramname"><em>callbacks</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>userdata</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Unregister interest in changes to a playlist container</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">callbacks</td><td>Callbacks, see <a class="el" href="structsp__playlistcontainer__callbacks.html">sp_playlistcontainer_callbacks</a> </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">userdata</td><td>Opaque value passed to callbacks.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section see"><dt>See also:</dt><dd><a class="el" href="group__session.html#ga319767f0b795f1c46a08390b587c5671">sp_session_playlistcontainer()</a> </dd>
<dd>
<a class="el" href="group__playlist.html#ga1976cb49c391cdd2dbe7c40d1bc71570">sp_playlistcontainer_add_callbacks</a> </dd></dl>
<dl class="section return"><dt>Returns:</dt><dd>One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK </dd></dl>

</div>
</div>
<a class="anchor" id="ga1ae1d51c4305940ae5c5c98c12be0afc"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="group__error.html#gafd27986ce4cd9eeaeca8adda83c9eb6b">sp_error</a> <a class="el" href="group__playlist.html#ga1ae1d51c4305940ae5c5c98c12be0afc">sp_playlistcontainer_remove_playlist</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="group__types.html#ga45a2febbe167483e48dab8d606d462d7">sp_playlistcontainer</a> *&#160;</td>
          <td class="paramname"><em>pc</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&#160;</td>
          <td class="paramname"><em>index</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Remove playlist at index from the given playlist container</p>
<dl class="params"><dt><b>Parameters:</b></dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">pc</td><td>Playlist container </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">index</td><td>Index of playlist to be removed</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns:</dt><dd>error One of the following errors, from <a class="el" href="group__error.html#ga83154178d3a32668658734d2facfa22b">sp_error</a> SP_ERROR_OK SP_ERROR_INDEX_OUT_OF_RANGE </dd></dl>

</div>
</div>
</div><!-- contents -->
<hr size="1"><address style="text-align: right;"><small>
Generated on Wed May 23 2012 11:04:07.<br>
Copyright &copy; 2006&ndash;2012 Spotify Ltd</small></address>
</body>
</html>
